<!DOCTYPE html>
<html>

  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  <title>GcsSloop</title>
  <meta name="description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="author" content="GcsSloop">
  <meta name="keywords" content="">
  <meta name="关键字" content="">
  

  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="GcsSloop">
  <meta name="twitter:description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="twitter:keywords" content="">
  
  <meta property="og:type" content="article">
  <meta property="og:title" content="GcsSloop">
  <meta property="og:description" content="嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。">
  <meta name="og:keywords" content="">

  <meta name="theme-color" content="#343434">
  
  <link rel="icon" type="image/png" href="https://raw.githubusercontent.com/GcsSloop/gcssloop.github.io/master/assets/siteinfo/favicon.png" />
  <link href="https://raw.githubusercontent.com/GcsSloop/gcssloop.github.io/master/assets/siteinfo/favicon.png" rel="shortcut icon" type="image/png">
  
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet">
  <link rel="stylesheet" href="/css/main.css">

  <link rel="canonical" href="http://www.gcssloop.com/page/3/">
  <link rel="alternate" type="application/rss+xml" title="GcsSloop" href="http://www.gcssloop.com/feed.xml">
  
  <meta name="google-site-verification" content="Z_g58PkzRAyBMxkqrcDdWrTBK8oOWM-7rUHauhLNF2E" />
  <meta name="baidu-site-verification" content="kUtTXCKaZs" />
  <meta name="baidu-site-verification" content="6DuDv3aaJX" />
  
  <!--阅读次数统计-->
  <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"> </script>
  
  <!--Fuck Weixin and Baidu-->
  <meta http-equiv="Cache-Control" content="no-transform">
  <meta http-equiv=”Cache-Control” content=”no-siteapp” />
  <meta name="applicable-device" content="pc,mobile">
  <meta name="HandheldFriendly" content="true"/>

  <!-- Google Ad -->
  <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
  <script>
    (adsbygoogle = window.adsbygoogle || []).push({
      google_ad_client: "ca-pub-2767831356529421",
      enable_page_level_ads: true
    });
  </script>

</head>


  <body>

    <span class="mobile btn-mobile-menu">
        <i class="fa fa-list btn-mobile-menu__icon"></i>
        <i class="fa fa-angle-up btn-mobile-close__icon hidden"></i>
    </span>
    
    <header class="panel-cover " style="background-image: url('/assets/siteinfo/background-cover.jpg')">
  <div class="panel-main">

    <div class="panel-main__inner panel-inverted">
    <div class="panel-main__content">

        <a href="/#blog" title="前往 GcsSloop 的主页" class="blog-button"><img src="/assets/siteinfo/avatar.jpg" width="80" alt="GcsSloop logo" class="panel-cover__logo logo" /></a>
        <h1 class="panel-cover__title panel-title"><a href="/#blog" title="link to homepage for GcsSloop" class="blog-button">GcsSloop</a></h1>

        
        <span class="panel-cover__subtitle panel-subtitle">Just do IT later.</span>
        
        <hr class="panel-cover__divider" />
        <p class="panel-cover__description">嗨，我是 GcsSloop，一名来自2.5次元的魔法师，Android自定义View系列文章作者，非著名程序员。</p>
        <hr class="panel-cover__divider panel-cover__divider--secondary" />
        
        
        <p class="panel-cover__description">欢迎来到我的魔法世界!</p>
        
        
        <div class="navigation-wrapper">
          <div>
            <nav class="cover-navigation cover-navigation--primary">
              <ul class="navigation">
                <li class="navigation__item"><a href="/#blog" title="访问博客" class="blog-button">博客</a></li>
                
                  
                    <li class="navigation__item"><a href="https://github.com/GcsSloop" target="_blank" title="GcsSloop's GitHub">GitHub</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/timeline" title="博客目录">目录</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="https://xiaozhuanlan.com/u/GcsSloop" target="_blank" title="小专栏">专栏</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/category/customview" title="自定义View教程目录">自定义控件</a></li>
                  
                  
                
                  
                    <li class="navigation__item"><a href="/friends" title="友链">友链</a></li>
                  
                  
                
              </ul>
            </nav>
          </div>
          
          <div><nav class="cover-navigation navigation--social">
  <ul class="navigation">

  
  <!-- Weibo -->
  <li class="navigation__item">
    <a href="http://weibo.com/GcsSloop" title="@GcsSloop 的微博" target="_blank">
      <i class='social fa fa-weibo'></i>
      <span class="label">Weibo</span>
    </a>
  </li>
  

  
  <!-- Github -->
  <li class="navigation__item">
    <a href="https://github.com/GcsSloop" title="@GcsSloop 的 Github" target="_blank">
      <i class='social fa fa-github'></i>
      <span class="label">Github</span>
    </a>
  </li>
  
  
  
  <!-- Twitter -->
  <li class="navigation__item">
    <a href="http://twitter.com/GcsSloop" title="@GcsSloop" target="_blank">
      <i class='social fa fa-twitter'></i>
      <span class="label">Twitter</span>
    </a>
  </li>
  

    

  

  
  <!-- RSS -->
  <li class="navigation__item">
    <a href="/feed.xml" rel="author" title="RSS" target="_blank">
      <i class='social fa fa-rss'></i>
      <span class="label">RSS</span>
    </a>
  </li>
  

  
  <!-- Email -->
  <li class="navigation__item">
    <a href="mailto:GcsSloop@gmail.com" title="发邮件给我">
      <i class='social fa fa-envelope'></i>
      <span class="label">Email</span>
    </a>
  </li>
  

  
  <!-- Copyright -->
  <li class="navigation__item">
    <a href="http://choosealicense.online" title="选择版权"  target="_blank">
      <i class="social fa fa-copyright"></i>
      <span class="label">版权</span>
    </a>
  </li>
  
  
  </ul>
</nav>
</div>
        </div>
      </div>
    </div>
    
    
    <div class="panel-cover--overlay cover-slate"></div>
    
  </div>
</header>


    <div class="content-wrapper">
        <div class="content-wrapper__inner">
            <div class="main-post-list hidden">

  <ol class="post-list">
    <!--目录-->
    
    <!--置顶-->
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
    <!--普通文档流-->
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/touch-matrix-region" title="访问 安卓自定义View进阶-特殊控件的事件处理方案">安卓自定义View进阶-特殊控件的事件处理方案</a></h2>
          <p class="excerpt">本文带大家了解 Android 特殊形状控件的事件处理方式，主要是利用了 Region 和 Matrix 的一些方法，超级实用的事件处理方案，相信看完本篇之后，任何奇葩控件的事件处理都会变得十分简单。不得不说，Android 对事件体系封装的非常棒，即便对事件体系不太了解的人，只要简单的调用方法就能使用，而且具有防呆设计，能够保证事件流的完整性和统一性，最大可能性的避免了事件处理的混乱，着实令人佩服。然而世界上并没有绝对完美的东西，当”事件处理”遇上”自定义View”，一场好戏就开演了。特殊形状控件在通常的情...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-11-16 00:00:00 +0800" class="post-list__meta--date date">2016-11-16</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/touch-matrix-region>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/markdown/markdown-links" title="访问 Markdown实用技巧－链接和图片">Markdown实用技巧－链接和图片</a></h2>
          <p class="excerpt">Sloop 喝过半杯咖啡，涨红的脸色渐渐复了原，旁人便又问道，“ Sloop，你当真会写文章么？” Sloop 看着问他的人，显出不屑置辩的神气。他们便接着说道，“你怎的连半个赞也捞不到呢？” Sloop 立刻显出颓唐不安模样，脸上笼上了一层灰色，嘴里说些话；这回可是全是技术名词之类，一些不懂了。在这时候，众人也都哄笑起来：办公室内外充满了快活的空气。在这些时候，我可以附和着笑，老板是决不责备的。而且老板见了 Sloop，也每每这样问他，引人发笑。Sloop 自己知道不能和他们谈天，便只好向实习生说话。有一回...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-11-08 00:00:00 +0800" class="post-list__meta--date date">2016-11-08</time> &#8226; <span class="post-list__meta--tags tags">Markdown</span> <a class="btn-border-small" href=/markdown/markdown-links>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/motionevent" title="访问 安卓自定义View进阶-MotionEvent详解">安卓自定义View进阶-MotionEvent详解</a></h2>
          <p class="excerpt">Android MotionEvent 详解，之前用了两篇文章 事件分发机制原理 和 事件分发机制详解 来讲解事件分发，而作为事件分发主角之一的 MotionEvent 并没有过多的说明，本文就带大家了解 MotionEvent 的相关内容，简要介绍触摸事件，主要包括 单点触控、多点触控、鼠标事件 以及 getAction() 和 getActionMasked() 的区别。Android 将所有的输入事件都放在了 MotionEvent 中，随着安卓的不断发展壮大，MotionEvent 也开始变得越来越复...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-11-02 00:00:00 +0800" class="post-list__meta--date date">2016-11-02</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/motionevent>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/markdown/markdown-grammar" title="访问 Markdown实用技巧－基础语法">Markdown实用技巧－基础语法</a></h2>
          <p class="excerpt">本文为 Markdown实用技巧 系列的基础文章，并没有不可描述的内容 (⊙ω⊙)为保证语法兼容性，本文只介绍基础语法，扩展语法等其它内容，会在后续的文章中单独介绍。注意：所有的标记符号均使用英文，中文无效。标题Markdown 支持多种标题格式。利用 = (等号)和 -(减号)可以定义一级标题和二级标题，(任何数量的 = 和 - 都有效果) ：          Markdown      预览              一级标题====      一级标题              二级标题----   ...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-10-25 00:00:00 +0800" class="post-list__meta--date date">2016-10-25</time> &#8226; <span class="post-list__meta--tags tags">Markdown</span> <a class="btn-border-small" href=/markdown/markdown-grammar>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/markdown/markdown-start" title="访问 Markdown实用技巧－快速入门">Markdown实用技巧－快速入门</a></h2>
          <p class="excerpt">本文为 Markdown实用技巧 系列的基础文章，并没有不可描述的内容 (⊙ω⊙)自从接触了 Markdown 之后，就一直用 Markdown 作为自己的主要书写工具，不论是平时做一些简单的纪录，还是用来写博客，写文档都是非常方便。你现在看到的这篇文章就是用 Markdown 进行书写的。  我最早因为 GitHub 而了解到 Markdown，当时支持 Markdown 的平台并不多，现在很多平台都已经开始支持 Markdown了，不论是老牌的 CSDN 还是比较新的 简书、掘金、DiyCode 等都支持...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-10-24 00:00:00 +0800" class="post-list__meta--date date">2016-10-24</time> &#8226; <span class="post-list__meta--tags tags">Markdown</span> <a class="btn-border-small" href=/markdown/markdown-start>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/dispatch-touchevent-source" title="访问 安卓自定义View进阶-事件分发机制详解">安卓自定义View进阶-事件分发机制详解</a></h2>
          <p class="excerpt">Android 事件分发机制详解，在上一篇文章 事件分发机制原理 中简要分析了一下事件分发机制的原理，原理是十分简单的，一句话就能总结：责任链模式，事件层层传递，直到被消费。 虽然原理简单，但是随着 Android 不断的发展，实际运用场景也越来越复杂，所以想要彻底玩转事件分发机制还需要一定技巧，本篇事件分发机制详解将带大家了解 …  你以为我接下来要讲源码？我就不按套路，所有的源码都是为了适应具体的应用场景而写的，只要能够理解运用场景，理解源码也就十分简单了。所以本篇的核心问题是：正确理解在实际场景中事件分...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-10-14 00:00:00 +0800" class="post-list__meta--date date">2016-10-14</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/dispatch-touchevent-source>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/python/tinypng-voice" title="访问 让脚本说话"厉害了我的哥"">让脚本说话"厉害了我的哥"</a></h2>
          <p class="excerpt">前段时间发现 Mac 上一个有趣的方法可以让系统说话。例如在终端输入：say "厉害了我的哥"于是把我自己经常使用的图片压缩脚本升了一下级，人工(智能)语音提示，开启装逼新时代!  本次升级进行了平台安全判断，不会影响其它平台用户的正常使用。在 Mac 上，它说话同时输出信息，在其他平台上只会输出信息。语音提示默认开启，可以关闭语音提示，将源码中voice设置为 False 即关闭语音提示。voice = False 	# 是否语音提示想要调教输出内容的自己进源文件修改吧，代码量不到一百行，短小精悍，纯种 P...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-10-10 00:00:00 +0800" class="post-list__meta--date date">2016-10-10</time> &#8226; <span class="post-list__meta--tags tags">Python</span> <a class="btn-border-small" href=/python/tinypng-voice>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/dispatch-touchevent-theory" title="访问 安卓自定义View进阶-事件分发机制原理">安卓自定义View进阶-事件分发机制原理</a></h2>
          <p class="excerpt">之前讲解了很多与View绘图相关的知识，你可以在 安卓自定义View教程目录 中查看到这些文章，如果你理解了这些文章，那么至少2D绘图部分不是难题了，大部分的需求都能满足，但是关于View还有很多知识点，例如: 让绘图更加炫酷的Paint，让View动起来的动画，与用户交互的触控事件 等一系列内容。本次就带大家简单的了解一下与交互息息相关的东西－事件分发原理。  本次魔法小火车的终点站是事件分发，请各位魔法师带好装备，准备登车启程。注意：本文中所有源码分析部分均基于 API23(Android 6.0) 版本...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-09-28 00:00:00 +0800" class="post-list__meta--date date">2016-09-28</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/dispatch-touchevent-theory>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/tips/choose-license" title="访问 程序员不可不知的版权协议">程序员不可不知的版权协议</a></h2>
          <p class="excerpt">前一段时间知乎上关于版权问题的讨论有不少，例如这个 新浪微博上的「知乎大神」是谁？涉嫌侵权吗？, 而且最近喜马拉雅FM也因为背景音乐版权问题导致很多栏目被下架和推迟更新，而我作为一个喜欢分享的魔法师，也遇到过一些版权相关方面的问题，刚好借此机会向大家科普一下开源协议和知识共享协议。开源协议相信很多小伙伴在开发的时候都默认遵循 不重复造轮子(偷懒) 这一原则，只要有了思路就马上在GitHub搜索一下，看看是否有人已经做了，如果已经有做好的，自然就不客气啦，拿过来修改一下就能用，不由得心中暗喜，又省了好多时间能用...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-09-20 00:00:00 +0800" class="post-list__meta--date date">2016-09-20</time> &#8226; <span class="post-list__meta--tags tags">Tips</span> <a class="btn-border-small" href=/tips/choose-license>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
    
      <li>
          <!--正常文档-->
          
          <h2 class="post-list__post-title post-title"><a href="/customview/matrix-3d-camera" title="访问 安卓自定义View进阶-Matrix Camera">安卓自定义View进阶-Matrix Camera</a></h2>
          <p class="excerpt">本篇依旧属于Matrix，主要讲解Camera，Android下有很多相机应用，其中的美颜相机更是不少，不过今天这个Camera可不是我们平时拍照的那个相机，而是graphic包下的Camera，专业给View拍照的相机，不过既然是相机，作用都是类似的，主要是将3D的内容拍扁变成2D的内容。众所周知，我们的手机屏幕是一个2D的平面，所以也没办法直接显示3D的信息，因此我们看到的所有3D效果都是3D在2D平面的投影而已，而本文中的Camera主要作用就是这个，将3D信息转换为2D平面上的投影，实际上这个类更像是...&hellip;</p>
          <div class="post-list__meta"><time datetime="2016-09-14 00:00:00 +0800" class="post-list__meta--date date">2016-09-14</time> &#8226; <span class="post-list__meta--tags tags">CustomView</span> <a class="btn-border-small" href=/customview/matrix-3d-camera>继续阅读</a></div>
          <hr class="post-list__divider" />
          
      </li>
    
    
  </ol>

  <hr class="post-list__divider " />

<nav class="pagination" role="navigation">
    
        <a class="newer-posts pagination__newer btn btn-small btn-tertiary" href="/page/2/#blog">&larr; 最近</a>
    
    <span class="pagination__page-number">3 / 6</span>
    
        <a class="older-posts pagination__older btn btn-small btn-tertiary" href="/page/4/#blog">更早 &rarr;</a>
    
</nav>


</div>


            <section class="footer">
    <footer>
    	<span class="footer__copyright">本站点采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh" target="_blank">知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议</a></span>
        <span class="footer__copyright">本站由 <a href="http://www.GcsSloop.com">@GcsSloop</a> 创建，采用 <a href="https://github.com/GcsSloop/Gcs-Vno-Jekyll" target="_blank">Gcs-Vno-Jekyll</a> 作为主题。<span id="busuanzi_container_site_pv"> 总访问量 <span id="busuanzi_value_site_pv"></span> 次</span> - &copy; 2019</span>
        <span class="footer__sitemap, footer__copyright"><a href="http://www.gcssloop.com/sitemap.xml" target="_blank">Site Map</a>
        <a href="http://www.gcssloop.com/vip" target="_blank">vip</a></span>
    </footer>
</section>

        </div>
    </div>
    
    <script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script>

<script type="text/javascript" src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

<script type="text/javascript" src="/js/main.js"></script>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-82493667-1', 'auto');
  ga('send', 'pageview');

</script>

    
  </body>

</html>
